"""
数据库迁移

- 目的：当数据的表结构发生变化之后，如果直接删除原有的数据，再添加新的数据，有可能会导致数据丢失
- 注意点：
    - 1. 是为了备份表结构，而不是数据
    - 2. 如果想要备份数据，需要使用工具，navicat，mysqlworkbench……
- 操作流程
    - 1. 安装扩展
        - pip install flask_script
        - pip install flask_migrate
    - 2. 导入三个类
        - from flask_script import Manager
        - from install flask_migrate
    - 3. 通过 Manager 类创建对象 manager，管理app
        - manager = Manager(app)
    - 4. 使用 Migrate，关联app，db
        - Migrate(app, db)
    - 5. 给manager添加一条操作命令
        - manager.add_command("db", MigrateCommand)
    - 相关迁移命令：
        - 生成迁移文件夹：
            - python xxx.py db init
        - 将模型类生成迁移脚本
            - python xxx.py db migrate -m '注释'
        - 将迁移脚本更新到数据库中
            - python xxx.py db upgrade
"""
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager

# 导入数据迁移核心类
from flask_migrate import Migrate, MigrateCommand

app = Flask(__name__)

# 设置数据库的配置信息
# mysql://[用户名]:[密码]@[主机地址][端口号]/[数据库名]
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:123456@127.0.0.1:3306/flasktest"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

# 创建 sqlalchemy 对象 db，关联 app
db = SQLAlchemy(app)

manager = Manager(app)

# 初始化数据迁移
migrate = Migrate(app, db)

# 给manager添加一条操作命令
manager.add_command("db", MigrateCommand)


# 编写模型类
class Student(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))


@app.route("/")
def helloworld():
    return "hello world Flask"


if __name__ == "__main__":
    manager.run()
